package co.gov.aerocivil.siga.registrarquejaservicioaerolinea.servicio.impl;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import co.gov.aerocivil.siga.comun.bean.IMensaje;
import co.gov.aerocivil.siga.comun.excepcion.SistemaExcepcion;
import co.gov.aerocivil.siga.comun.servicio.auditoria.ILogError;
import co.gov.aerocivil.siga.proceso.servicio.IMotorProcesoConsultaServicio;
import co.gov.aerocivil.siga.proceso.servicio.IMotorProcesoServicio;
import co.gov.aerocivil.siga.registrarquejaservicioaerolinea.servicio.IMotorProcesoTramiteRegistrarQuejaAerolinea;
import co.gov.aerocivil.siga.registrarquejaservicioaerolinea.util.ConstantesValidacion;

/**
 * /**
 * Clase EJB que implementa la interfaz IMotorProcesoTramiteDemo
 * @author jmgoyes@itc.com.co
 */
@Stateless
public class MotorProcesoTramiteRegistrarQuejaAerolinea implements IMotorProcesoTramiteRegistrarQuejaAerolinea {
	
	/** 
	 * Constante que representa la instancia del Log 
	 */
	private static final org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(MotorProcesoTramiteRegistrarQuejaAerolinea.class);
	/**
	 * Inyección EJB del servicio transversal MotorProcesoServicio
	 */
	@EJB
	private IMotorProcesoServicio motorProceso;
	/**
	 * Inyección EJB del servicio transversal MotorProcesoConsultaServicio
	 */
	@EJB
	private IMotorProcesoConsultaServicio motorProcesoConsulta;
	/**
	 * Inyección EJB del servicio transversal LogError
	 */
	@EJB
	private ILogError logError;
	
	/**
	 * Inyección CDI del bean de aplicación de Mensajes
	 */
	@Inject
	private IMensaje mensaje;
	
	@Override
	public void desplegar( boolean ignorar ){
		try {
			LOG.info( "Iniciando despliegue del proceso Registrar Queja. Ignorar: " + ignorar );			
			motorProceso.desplegarProceso( "diagrama/registrarquejaservicioaerolinea.bpmn20.xml", "registrarQuejaServicioAerolinea", ignorar );
			LOG.info( "Finalizado despliegue del proceso Registrar Queja. Ignorar: " + ignorar );			
		} catch (RuntimeException re ){
			logError.log( mensaje.obtenerMensaje( ConstantesValidacion.ERROR_SISTEMA_INICIO_REGISTRAR_QUEJA ) + " [" + re.getMessage() + "]", re ,LOG );
			throw new SistemaExcepcion( mensaje.obtenerMensaje( ConstantesValidacion.ERROR_SISTEMA_INICIO_REGISTRAR_QUEJA ), re);
		}
	}
	
	@Override
	public String obtenerInstanciaProcesoEnEjecucion(){
		String idInstanciaProceso = null;
		try {
			LOG.info( "Obteniendo id instancia proceso en ejecución dentro del contexto" );
			idInstanciaProceso = motorProcesoConsulta.obtenerInstanciaProcesoEnEjecucion();
			LOG.info( "Id instancia proceso en ejecución obtenido dentro del contexto: " + idInstanciaProceso );
		} catch (RuntimeException re ){
			logError.log( mensaje.obtenerMensaje( ConstantesValidacion.ERROR_SISTEMA_INICIO_REGISTRAR_QUEJA ) + " [" + re.getMessage() + "]", re ,LOG );
			throw new SistemaExcepcion( mensaje.obtenerMensaje( ConstantesValidacion.ERROR_SISTEMA_INICIO_REGISTRAR_QUEJA ), re);
		}
		return idInstanciaProceso;
	}
	
	@Override
	public <T> T obtenerVariable( String nombreVariable ){
		T valorVarible = null;
		try {
			LOG.info( "Obteniendo valor del nombre de variable: " + nombreVariable );
			valorVarible = motorProcesoConsulta.obtenerVariable(nombreVariable);
			LOG.info( "Valor del nombre de variable: " + nombreVariable + ", obtenido. Valor: " + valorVarible );
		} catch (RuntimeException re ){
			logError.log( mensaje.obtenerMensaje( ConstantesValidacion.ERROR_SISTEMA_INICIO_REGISTRAR_QUEJA ) + " [" + re.getMessage() + "]", re ,LOG );
			throw new SistemaExcepcion( mensaje.obtenerMensaje( ConstantesValidacion.ERROR_SISTEMA_INICIO_REGISTRAR_QUEJA ), re);
		}
		return valorVarible;
	}

}
